﻿#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

/*
* int sprintf(char* str, const char* format, ...);
* 功能：
*     根据参数，format字符串来转换并格式化数据，然后将结果输出到str指定的空间中，直到出现字符串结束符'\0'为止；
* 参数：
*	  str，字符串首地址；
*	  format，字符串格式，用法和printf()一样；
* 返回值：
*	  成功，实际格式化的字符个数；
*	  失败，-1；
*/

void testSprintf()
{
	//1.格式化字符串；
	char buf[1024] = { 0 };
	sprintf(buf, "Hello, %s!", "Trump");
	printf("2.使用sprintf按格式输出字符串，即buf：%s\n", buf);//Hello, Trump!
	printf("4.直接用printf格式化输出字符串：Hello, %s\n", "Davinci!");//Hello, Davinci!

	//3.拼接字符串；
	char* s1 = "hello";
	char* s2 = "world";
	memset(buf, 0, 1024);
	sprintf(buf, "%s %s", s1, s2);
	printf("5.使用sprintf拼接字符串，则buf：%s\n", buf);//hello world

	//6.数字转成字符串格式；
	int number = 666;
	memset(buf, 0, 1024);
	sprintf(buf, "%d", number);
	printf("7.使用sprintf将数字转成字符串，即buf为：%s\n", buf);//666

	//13.格式化数字为八进制，十六进制；
	memset(buf, 0, 1024);
	sprintf(buf, "%o", number);
	printf("14.将十进制数字666格式化为八进制，并转成字符串输出，则buf：%s\n", buf);//1232
	memset(buf, 0, 1024);
	sprintf(buf, "%x", number);
	printf("15.将十进制数字666格式化为十六进制，并转成字符串输出，则buf：%s\n", buf);//29a

	//8.使用指针数组，存储一级指针，来保存字符串；
	char** p = malloc(sizeof(char*) * 5);
	for (int i = 0; i < 5; ++i)
	{
		//9.p[i]就是*p，就是p，为p地址指向的值;
		p[i] = malloc(64);
		memset(p[i], 0, 64);
		sprintf(p[i], "Name_%d", i + 1);
	}
	//10.输出字符串；
	for (int i = 0; i < 5; ++i)
	{
		printf("11.输出堆空间中的5个字符串：%s\n", p[i]);//Name_1,...,Name_5
	}
	//12.释放空间；
	for (int i = 0; i < 5; ++i)
	{
		if (p[i] != NULL)
		{
			free(p[i]);
			p[i] = NULL;
		}
	}
	if (p != NULL)
	{
		free(p);
		p = NULL;
	}

}

//main192：sprintf格式化输出字符串
int main192()
{
	testSprintf();

	system("pause");
	return EXIT_SUCCESS;
}